#pragma once

#include <sstream>
#include "zakengine/zak.h"
#include "telegram.h"
#include "algorithms/AStar.h"

using namespace zak;

class BaseGameEntity : public Sprite 
{
public:
	
	// Class constructor
	BaseGameEntity(int iID);
	
	// Class destructor
	~BaseGameEntity();

	// Initialize
	virtual bool				Initialize()=0;

	// Abstract Update Function
	virtual void				Update(float dt);

	// ID Getter
	int							ID()const{return m_iID;}

	// Message Handling
	virtual bool				HandleMessage(const Telegram& message)=0;

	// Tagging for steering behaviors
	bool						IsTagged()const{return m_bTag;}

	void						Tag(){m_bTag = true;}

	void						UnTag(){m_bTag = false;}

private:
	
	// Unique identifying number
	int							m_iID;				
	
	// Next valid ID
	static int					m_iNextValidID;		

	// Tag
	bool						m_bTag;

	// Sets ID
	void						SetID(int iID);
};